import UIKit

/* XCode15的Swift版本5.9 */

/* Swift运算符 */
// 算数运、比较、逻辑、位、赋值、三元运算符同C语言

// ！！！从Swift3起，取消了++和--

// 区间运算符
print("闭区间运算符:")
// 从a到b包括a和b的区间
for index in 1...5 {
    print("\(index) * 5 = \(index * 5)")
}

print("半开区间运算符:")
// 从a到b包括a但不包括b的区间
for index in 1..<5 {
    print("\(index) * 5 = \(index * 5)")
}

// 合并空值运算符
// a ?? b <=> a != nil ? a! : b
// 1.表达式 a 必须是一个可选类型
// 2.表达式 b 必须与 a 的存储类型相同
// 3.合并空值运算符是短路的

/* 条件语句：if else switch case */
// 类似于C语言的写法，只是不用在表达式外面添加括号

// ！！！Swift中的switch-case默认只会执行一个case
// 不需要在case后面紧跟break
// 仍然需要注意switch语句中匹配条件的完备性

// 如果确实需要类似C语言继续执行进入的case之后的case中语句
// 需要在这个case及之后的case中加上fallthrough

// switch语句中的case部分可以匹配范围
var curMonth = 5
switch curMonth {
case 1...3: print("the first season")
case 4...6: print("the second season")
default: print("the latter half of the year.")
}

// switch语句中的case部分可以匹配元组值
var classInfo = (2015, "Computer Science")
switch classInfo {
case (2016, "Computer Science"): print(classInfo)
case (2016, _): print("2016's other class")
case (_, "Computer Science"): print("Compuer Science in other year")
default: print("We don''t care this class infomation")
}

// 可以在case语句中进行值绑定
classInfo = (2012, "Medicine")
switch classInfo {
case (let year, "Computer Science"): print("Year \(year)'s Computer Science Class")
case (2016, let course): print("2016's class \(course)")
// 最后这个case实际上已经有了default的功能
case let (year, course): print("Class \(course) in year \(year)")
}

// 上述过程还可以引入where语句
switch classInfo {
case let (year, course) where year == 2015:
    print("Class \(course) in year 2015")
case let (year, course) where course == "Medicine":
    print("Class Medicine in year \(year)")
case let (year, course):
    print("Class \(course) in year \(year)")
}

/* 循环语句 */

// for-in 循环用于遍历一个集合里面的所有元素
// 如区间、数组中的元素、字符串中的字符等
for index in 1...5 {
    print("\(index) 乘于 5 为：\(index * 5)")
}

// ！！！从Swift3起，已经不允许写C语言风格的for循环了

// while循环，类似于C语言，不用在表达式外面添加括号

// repeat-while循环，即do-while循环
// 只是将do变更成了repeat，同样不用在while表达式外面添加括号
